A production system (or production rule system) is a computer program which consists primarily of a set of rules about behavior and which is used to provide some form of artificial intelligence (AI). These rules, termed productions, are a basic representation found useful in AI planning, expert systems, and action selection. A production system provides the mechanism to execute productions in order to achieve some goal for the system.
Typically, productions consist of two parts: a sensory precondition (or “IF” statement) and an action (or “THEN”). If a production's precondition matches the current state of knowledge, then the production is said to be triggered. If a production's action is executed, it is said to have fired. A typical production system also contains a database, sometimes called working memory, which maintains data about current state or knowledge, and a rule interpreter. The rule interpreter usually provides a mechanism for prioritizing productions when more than one is triggered. Rule interpreters generally execute a forward chaining algorithm for selecting productions to execute to meet current goals, which can include updating the system's data or knowledge. The condition portion of each rule (left-hand side or LHS) is tested against the current state of the working memory.
Idealized or data-oriented production systems often assume that any triggered conditions will be executed, e.g., that the consequent actions (right-hand side or RHS) will update the agent's knowledge, removing or adding data to the working memory, if nothing else. The system stops processing either when the user interrupts the forward chaining loop, when a given number of cycles has been performed, when a “halt” RHS is executed, or when no rules have true LHSs. Real-time systems, in contrast, often will choose between mutually exclusive productions; since actions take time, only one action can be taken. In such systems, the rule interpreter, or rules engine (also called inference engine), cycles through two steps: (a) matching production rules against the database, followed by selecting which of the matched rules to apply; and (b) executing the selected actions. In many instances, the rules or inference engine is a separate component of a larger program or application.
Production systems may vary on the expressive power of conditions in production rules. Accordingly, the pattern matching algorithm which collects production rules with matched conditions may range from the naïve, in which rules are tried in sequence and until the first match, to the optimized, in which rules are “compiled” into a network of inter-related conditions. The latter is illustrated by the RETE algorithm, designed by Charles L. Forgy in 1983, which is used in a series of production systems, called OPS and originally developed at Carnegie Mellon University culminating in OPS5 in the early eighties.
A computer cluster is a group of loosely coupled computers that work together so closely that they can be viewed as though they are a single computer. The components of a cluster are commonly, but not always, connected to each other through local area networks. Clusters are usually deployed to improve performance and/or availability over that provided by a single computer, while typically being much more cost-effective than single computers of comparable speed or availability.
High-availability (HA) clusters are implemented primarily for the purpose of improving the availability of the services which the cluster provides. They operate by having redundant nodes, which are then used to provide service when system components fail. HA cluster implementations attempt to manage the redundancy inherent in a cluster to eliminate single points of failure. Load-balancing clusters operate by having all workload come through one or more load-balancing front ends, which then distribute it to a collection of back end servers. Although they are primarily implemented for improved performance, they commonly include high-availability features as well. Such a cluster of computers is sometimes referred to as a server farm. High-performance clusters (HPC) are implemented primarily to provide increased performance by splitting a computational task across many different nodes in the cluster and are most commonly used in scientific computing. Such clusters commonly run custom programs which have been designed to exploit the available parallelism. HPC clusters are optimized for workloads which require active communication between jobs or processes Turning on separate computer nodes during the computation. These include computations where intermediate results from one node's calculations will affect future calculations on other nodes.